using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace webapi.Controllers
{
    #region 说明
    /* 代码在 本人的码云上存放 
     * https://gitee.com/belin2000/classfornetcore 
     * 视频在本人的B站存放 ，up主名称：微风记录
     * 视频上传前，代码都会先更新到码云上，可以边看视频边尝试和理解
     * 如果大家觉得我讲得好，请多支持
     */
    #endregion
    //课程2，webapi 接收json传送的内容
    /// <summary>
    /// 在第一节上，我们学习了用form的post和get的传输数据webapi。现在开发中，json的post也是一种传输方式，这种方式具有方便传输对象的特征。(在测试过程中，我们先要移除了one的控制器，因为one的控制器和本控制器有冲突)
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class twoController : ControllerBase
    {
        //那如何来发送和接受json对象呢，我们先来看一个函数,我们把这个函数设置为post传送
        [HttpPost]
        public int FromJson([FromBody] twobase a)  //int a  //twobase a
        {
            //return a.a + 1;
            return Convert.ToInt32(a.a) + 1;
        }
        //如果我们设置a是[FromForm]的话，只能从form对象里面获取，那是如何传送json的呢。
        //首先我们知道json是通过数据流传输的，所以，我们只能在body对象中获取数据流
        //所以，我们使用了 [FromBody]
        //结果，我们通过运行，发现接受不到a这个值，原来json传过来的是一个对象，但是我们接受的是一个int的值，
        //现在，我们把int 改为 动态（dynamic）对象后，运行 通过监控：我们看到a是： ValueKind = Object : "{"a":1}"，不是我们看到的{a:1}这种匿名对象

        //那么，我们换一种方法尝试,给动态对象指定类型，然后允许，发现可以正常了。
        //但我们很多时候，接受的是一个动态对象 （dynamic）,那应该如何处理呢，通过我们查找资料，发现了 webapi在转换的对象的时候，是使用自己的json来做的，那我们改变转换的方案，打开startup。

        //修改startup后，我们运行下，发现a已经转换成匿名类,但匿名类有时候不能确定类型，所以，我们最好强制转换类型。
    }
    public class twobase
    {
        public int a { set; get; }
    }
}
